package com.bamboo.tool.util;

import cn.hutool.core.util.StrUtil;
import com.bamboo.tool.constant.StringConstant;
import com.bamboo.tool.entity.*;
import com.bamboo.tool.enums.AttributeEnums;
import com.bamboo.tool.enums.ParsingTypeEnums;

import java.util.List;

/**
 * @author bamboo
 * Date 2022/9/15 15:19
 * Description 其它参数处理工具类
 */
public class OtherParameterUtil {


    /**
     * 方法参数处理方式
     */
    public static void methodParameter(String type, List<String> values, JavaFieldInfo javaDataType, ApiMethod apiMethod, AnnotationParam param) {
        MethodOtherInfo otherInfo = apiMethod.getOtherInfo();
        if (AttributeEnums.REQUIRED.getCode().equals(type)) {
            String value = values.get(0);
            if (value.equals(StringConstant.TRUE)) {
                javaDataType.setRequired(true);
            }
            return;
        }
        if (AttributeEnums.FIELD_NAME.getCode().equals(type)) {
            javaDataType.setFieldName(values.get(0));
            return;
        }
        if (AttributeEnums.CONTENT_TYPE.getCode().equals(type)) {
            otherInfo.setContentType(values.get(0));
            return;
        }
        if (AttributeEnums.IS_PATH_PARAM.getCode().equals(type)) {
            String value = values.get(0);
            javaDataType.setPathParam(value.equals(StringConstant.TRUE));
            return;
        }
        if (AttributeEnums.IS_HEAD_PARAM.getCode().equals(type)) {
            String value = values.get(0);
            javaDataType.setHeadParam(value.equals(StringConstant.TRUE));
            return;
        }
        if (AttributeEnums.IS_QUERY_PARAM.getCode().equals(type)) {
            String value = values.get(0);
            javaDataType.setQueryParam(value.equals(StringConstant.TRUE));
            return;
        }
        if (AttributeEnums.DEFAULT_VALUE.getCode().equals(type)) {
            String value = values.get(0);
            javaDataType.setDefaultValue(value);
            return;
        }
        if (AttributeEnums.FIELDMAX.getCode().equals(type)) {
            String value = values.get(0);
            javaDataType.setMaxLength(value);
            return;
        }
        if (AttributeEnums.IGNORE.getCode().equals(type)) {
            String value = values.get(0);
            if (param != null && StrUtil.isNotBlank(param.getParsingType())) {
                if (ParsingTypeEnums.ANTISENSE.getCode().equals(param.getParsingType())) {
                    javaDataType.setIsIgnore(value.equals(StringConstant.FALSE));
                }
            } else {
                javaDataType.setIsIgnore(value.equals(StringConstant.TRUE));
                return;
            }


        }

    }

    public static void fieldAnnotation(String type, List<String> values, JavaFieldInfo javaDataType, String frameworkCode, AnnotationParam param) {
        if (AttributeEnums.REQUIRED.getCode().equals(type)) {
            String value = values.get(0);
            if (value.equals(StringConstant.TRUE)) {
                javaDataType.setRequired(true);
            }
            return;
        }
        if (AttributeEnums.FIELDMIN.getCode().equals(type)) {
            String value = values.get(0);
            javaDataType.setMinLength(value);
            return;
        }
        if (AttributeEnums.FIELD_NAME.getCode().equals(type)) {
            String value = values.get(0);
            javaDataType.setFieldName(value);
            return;
        }
        if (AttributeEnums.FIELDMAX.getCode().equals(type)) {
            String value = values.get(0);
            javaDataType.setMaxLength(value);
            return;
        }
        if (AttributeEnums.DESCRIPTION.getCode().equals(type)) {
            javaDataType.getDesc().put(frameworkCode,StrUtil.removeAll(values.get(0),"'"));
            return;
        }
        if (AttributeEnums.IGNORE.getCode().equals(type)) {
            String value = values.get(0);
            if (param != null && StrUtil.isNotBlank(param.getParsingType())) {
                if (ParsingTypeEnums.ANTISENSE.getCode().equals(param.getParsingType())) {
                    javaDataType.setIsIgnore(value.equals(StringConstant.FALSE));
                }
            } else {
                javaDataType.setIsIgnore(value.equals(StringConstant.TRUE));
                return;
            }


        }

    }


}
